package com.ecommerce.dddmodules.sharedkernel.events;
/**
 * @packageName: sharedkernel.events（共享内核.事件包）
 * @className: EventBus(事件总线接口)
 * @description: 抽离事件总线接口
 * @author: luds
 * @version: v1.0
 * @date: 2021-04/01
 */
public interface EventBus {
	/**
	 * 发布（事件）
	 * @param event 事件
	 * @param <E> 限定继承自应用事件
	 */
	<E extends ApplicationEvent> void publish(E event);

	/**
	 * 订阅（事件）
	 * @param eventType 事件类型
	 * @param subscriber 订阅者
	 * @param <E> 限定继承自应用事件
	 */
	<E extends ApplicationEvent> void subscribe(String eventType, EventSubscriber subscriber);

	/**
	 * 退订（事件）
	 * @param eventType 事件类型
	 * @param subscriber 订阅者
	 * @param <E> 限定继承自应用事件
	 */
	<E extends ApplicationEvent> void unsubscribe(String eventType, EventSubscriber subscriber);
}
